package com.learn.DesignPattern.Singleton;

/**
 *设计模式
 * -单例模式
 * * 懒汉模式
 * * 饿汉模式
 * * 内部静态类
 * -特点
 * * 单利模式只能有一个实例
 * * 必须自己创建自己的唯一实例
 * * 必须给所有的替她对象提供这一实例
 */
public class SingletonStatic {



    /**
     * 饿汉
     */
   /* private static SingletonStatic instance=new SingletonStatic();

    public SingletonStatic() {
        System.out.println("产生一个学习委员");
    }

    public static SingletonStatic getInstance() {
        if(instance==null){
            return instance;
        }else {
            System.out.println("已经有一个学习委员，不能产生新的学习委员");
            return instance;
        }

    }
    public void getName(){
        System.out.println("我是学习委员:alex");
    }*/
    /**
     * 饿汉的 变异版
     */
    /*private static SingletonStatic instance=null;

    static {
        instance=new SingletonStatic();
    }
    public static SingletonStatic getInstance() {
        if(instance==null){
            return instance;
        }else {
            System.out.println("已经有一个学习委员，不能产生新的学习委员");
            return instance;
        }

    }
    public void getName(){
        System.out.println("我是学习委员:alex");
    }*/

    /**
     * 内部静态类
     */
    private static class SingletonHolder{
        private static final SingletonStatic instance = new SingletonStatic();
    }
    public SingletonStatic() {
        System.out.println("内部静态类->产生一个学习委员");
    }
    public static final SingletonStatic getInstance() {
        if(SingletonHolder.instance==null){
            return SingletonHolder.instance;
        }else {
            System.out.println("内部静态类->已经有一个学习委员，不能产生新的学习委员");
            return SingletonHolder.instance;
        }
    }
    public void getName(){
        System.out.println("内部静态类->我是学习委员:alex");
    }

}